home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 1.iso / ARGONET / PD / PROGRAMMING / DESKLIBC / SOURCES.ZIP / DeskLib / !DLSources / Libraries / WimpSWIs / s / 00Poll next >
Text File  |  1995-08-26  |  4KB  |  166 lines

  1. ;
  2. ;       Title                  : Wimp Poll
  3. ;       System                 : Wimp Library
  4. ;       Version                : 1.10
  5. ;       Copyright              : (C) John Winters
  6. ;       Date                   : 22nd September, 1991
  7. ;       Author                 : John H. Winters
  8. ;
  9. ;       Modifications          : 1.10 Jason Williams
  10. ;                                Added support for passing r3 (non-0 pollword)
  11. ;                                (new feature of the RISC OS 3 WIMP)
  12. ;
  13. ;
  14. ;============================================================================
  15. ;
  16. ;  Include files.
  17. ;
  18. ;============================================================================
  19. ;
  20.         GET     ^.h.regdefs
  21.         GET     ^.h.swinos
  22.         GET     ^.h.macros
  23. ;
  24. ;============================================================================
  25. ;
  26. ;  Code.
  27. ;
  28. ;============================================================================
  29. ;
  30.         PREAMBLE
  31.  
  32.         STARTCODE Wimp_CorruptFPStateOnPoll
  33. ;
  34.         LDR     a1, [pc, #L00001c-.-8]
  35.         MOV     a2, #0
  36.         STR     a2, [a1, #0]
  37.         MOVS    pc, lr
  38. L00001c
  39.         DCD     |x$dataseg|
  40.  
  41.         IMPORT  |x$stack_overflow|
  42.         IMPORT  |_kernel_fpavailable|
  43.         ;MPORT  fp_status_save
  44.         IMPORT  |_printf|
  45. ;
  46. ;
  47.         STARTCODE Wimp_Poll3
  48. ;
  49.         MOV     ip, sp
  50.         STMFD   sp!, {v1, v2, v3, fp, ip, lr, pc}
  51.         SUB     fp, ip, #4
  52.         CMPS    sp, sl
  53.         BLLT    |x$stack_overflow|
  54. ;
  55. ;  Save the parameters.
  56. ;
  57.         MOV     v3, a3
  58.         MOV     v2, a1
  59.         MOV     v1, a2
  60. ;
  61. ;  Check whether to save the FP status.
  62. ;
  63.         LDR     a1, [pc, #L00001c-.-8]
  64.         LDR     a1, [a1, #0]
  65.         CMPS    a1, #0
  66.         BLNE    |_kernel_fpavailable|
  67.         CMPNES  a1, #0
  68.         BLNE    fp_status_save
  69. ;
  70. ;  Save a flag indicating whether we saved or not.
  71. ;  Note that the use of lr as a temporary variable precludes this
  72. ;  code running in SVC mode.
  73. ;
  74.         MOV     lr, a1
  75. ;
  76. ;  Do the poll.
  77. ;
  78.         MOV     a1, v2
  79.         ADD     a2, v1, #4
  80.         MOV     a4, v3
  81.         SWI     SWI_Wimp_Poll + XOS_Bit
  82.         SUB     a2, a2, #4
  83.         STR     a1, [a2, #0]
  84.         MOVVC   a1, #0
  85.         CMP     lr, #0
  86.         BLNE    fp_status_restore
  87.         LDMDB   fp, {v1, v2, v3, fp, sp, pc}^
  88.  
  89.         STARTCODE Wimp_PollIdle3
  90. ;
  91.         MOV     ip, sp
  92.         STMFD   sp!, {v1 - v4, fp, ip, lr, pc}
  93.         SUB     fp, ip, #4
  94.         CMPS    sp, sl
  95.         BLLT    |x$stack_overflow|
  96. ;
  97. ;  Save the parameters.
  98. ;
  99.         MOV     v2, a1
  100.         MOV     v1, a2
  101.         MOV     v3, a3
  102.         MOV     v4, a4
  103. ;
  104. ;  Check whether to save the fp status.
  105. ;
  106.         LDR     a1, [pc, #L00001c-.-8]
  107.         LDR     a1, [a1, #0]
  108.         CMPS    a1, #0
  109.         BLNE    |_kernel_fpavailable|
  110.         CMPNES  a1, #0
  111.         BLNE    fp_status_save
  112.         MOV     lr, a1
  113.         MOV     a1, v2
  114.         ADD     a2, v1, #4
  115.         MOV     a3, v3
  116.         MOV     a4, v4
  117.         SWI     SWI_Wimp_PollIdle + XOS_Bit
  118.         CMP     lr, #0
  119.         BLNE    fp_status_restore
  120.         SUB     a2, a2, #4
  121.         STR     a1, [a2, #0]
  122.         MOVVC   a1, #0
  123.         LDMDB   fp, {v1-v4, fp, sp, pc}^
  124.  
  125.  
  126.         STARTCODE Wimp_SaveFPStateOnPoll
  127. ;
  128.         LDR     a1, [pc, #L00001c-.-8]
  129.         MOV     a2, #1
  130.         STR     a2, [a1, #0]
  131.         MOVS    pc, lr
  132.  
  133. fp_status_restore
  134.         MOV     v1, #0
  135.         WFS    v1
  136.         LDFE    f4, [sp, #0]
  137.         LDFE    f5, [sp, #12]
  138.         LDFE    f6, [sp, #24]
  139.         LDFE    f7, [sp, #36]
  140.         ADD     sp, sp, #48
  141.         LDMIA   sp!, {v1}
  142.         WFS    v1
  143.         MOVS    pc, lr
  144.  
  145. fp_status_save
  146.         RFS    a2
  147.         STMDB   sp!, {a2}
  148.         MOV     a2, #0
  149.         WFS    a2
  150.         SUB     sp, sp, #48
  151.         STFE    f4, [sp, #0]
  152.         STFE    f5, [sp, #12]
  153.         STFE    f6, [sp, #24]
  154.         STFE    f7, [sp, #36]
  155.         MOVS    pc, lr
  156.  
  157.     AREA |C$$data|
  158.  
  159. |x$dataseg|
  160.  
  161. save_fp
  162.         DCD     &00000000
  163.  
  164.  
  165.     END
  166.